package com.example.app.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.example.app.entity.User;
import com.example.app.entity.dto.DeleteRequest;
import com.example.app.entity.dto.LoginDTO;
import com.example.app.entity.dto.RegisterDTO;
import com.example.app.entity.dto.ResetPasswordDTO;
import com.example.app.entity.dto.UpdateUserDTO;
import com.example.app.entity.dto.UserManageDTO;
import com.example.app.entity.dto.UserQueryRequest;
import com.example.app.entity.dto.ChangePasswordDTO;
import com.example.app.entity.vo.UserPageVO;
import com.example.app.entity.vo.UserVO;

import javax.servlet.http.HttpServletRequest;

/**
* @author 15790
* @description 针对表【user(用户表)】的数据库操作Service
* @createDate 2025-04-01 20:47:22
*/
public interface UserService extends IService<User> {

    Boolean register(RegisterDTO registerDTO);

    UserVO login(LoginDTO loginDTO, HttpServletRequest request);

    UserVO getLoginUserInfo(HttpServletRequest request);

    void loginOut(DeleteRequest deleteRequest, HttpServletRequest request);

    void banUser(DeleteRequest deleteRequest, HttpServletRequest request);

    void unBanUser(DeleteRequest deleteRequest, HttpServletRequest request);
    
    /**
     * 更新用户信息
     *
     * @param updateUserDTO 用户信息更新请求
     * @param request 请求信息
     * @return 更新后的用户信息
     */
    UserVO updateUserInfo(UpdateUserDTO updateUserDTO, HttpServletRequest request);
    
    /**
     * 分页获取用户列表
     *
     * @param userQueryRequest 查询条件
     * @return 用户分页列表
     */
    UserPageVO listUsersByPage(UserQueryRequest userQueryRequest);
    
    /**
     * 管理员添加用户
     *
     * @param userManageDTO 用户信息
     * @param request 请求信息
     * @return 添加的用户信息
     */
    UserVO addUser(UserManageDTO userManageDTO, HttpServletRequest request);
    
    /**
     * 管理员更新用户
     *
     * @param userManageDTO 用户信息
     * @param request 请求信息
     * @return 更新后的用户信息
     */
    UserVO updateUser(UserManageDTO userManageDTO, HttpServletRequest request);
    
    /**
     * 删除用户
     *
     * @param deleteRequest 删除请求
     * @param request 请求信息
     * @return 是否成功
     */
    Boolean deleteUser(DeleteRequest deleteRequest, HttpServletRequest request);
    
    /**
     * 重置用户密码
     *
     * @param resetPasswordDTO 重置密码请求
     * @param request 请求信息
     * @return 是否成功
     */
    Boolean resetPassword(ResetPasswordDTO resetPasswordDTO, HttpServletRequest request);

    /**
     * 修改密码
     *
     * @param changePasswordDTO 密码修改请求
     * @param request 请求信息
     * @return 是否成功
     */
    Boolean changePassword(ChangePasswordDTO changePasswordDTO, HttpServletRequest request);
}
